package com.cjx.minio.feign;

import com.cjx.common.api.CommonResult;
import com.cjx.minio.dto.FileManagementDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;


/**
 * @author cjx
 * @version 1.0.0
 * @date 2020/09/28  09:46:03
 * @doc 文件管理fegin客户端
 */
@FeignClient(value = "baseplat-minio-service",path = "/filemanagement" )
public interface FileManagementClient {

    /**
     * 上传文件
     *
     * @param file       文件对象
     * @param userId     用户id
     * @param canPreview 是否可预览
     * @return 文件管理对象
     */
    @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    CommonResult<FileManagementDTO> uploadFile(@RequestPart(name = "file") MultipartFile file, @RequestParam(name = "userId") String userId, @RequestParam(name = "canPreview") Long canPreview);

    /**
     * 获取文件信息
     *
     * @param fileId 文件管理id
     * @return 文件管理对象
     */
    @GetMapping("/getFileManagementById")
    CommonResult getFileManagementById(@RequestParam(name = "fileId") String fileId);

    /**
     * 获取多个文件信息
     *
     * @param fileIds 文件管理ids
     * @return 文件管理对象列表
     */
    @GetMapping("/fileInfo/{fileIds}")
    CommonResult getFileManagementByIds(@PathVariable("fileIds") String fileIds);


    /**
     * 删除文件
     *
     * @param fileId 文件管理id
     * @return the result
     */
    @DeleteMapping("/deleteFileManagementById")
    CommonResult deleteFileManagementById(@RequestParam(name = "fileId") String fileId);

    /**
     * 删除多个文件
     *
     * @param fileIds 文件管理ids
     * @return the result
     */
    @DeleteMapping("/deleteFileManagementByIds")
    CommonResult deleteFileManagementByIds(@RequestParam(name = "fileIds") String fileIds);

    /**
     * 下载文件Base64字符串
     *
     * @param fileId 文件管理id
     * @return 结果字符串
     */
    @GetMapping("/downloadFile2Base64/{fileId}")
    CommonResult<String> downloadFile2Base64(@PathVariable(name = "fileId") String fileId);


    /**
     * 下载
     *
     * @param fileId   文件管理id
     * @param response 响应对象
     */
    @GetMapping("/downloadFile/{fileId}")
    CommonResult downloadFile(@PathVariable(name="fileId") String fileId, HttpServletResponse response);
}
